<?php
/**
 * huhaiqin,2025.2.5
 * 游戏模块商店接口
 */
namespace Game\Controller;
use Game\Controller\GameBaseController;

class ShopController extends GameBaseController{

    /**
     * huhaiqin,2025.2.5
     * 抽扭蛋
     * //请求参数
     * gacha_id: int //扭蛋id
     * //返回参数
     * $draw_result: int //物品id
     */
    private function draw_gacha($gacha_id){
        // 获取当前扭蛋爆率
        $rate_rule = C('GACHA_RATE')[$gacha_id];
        // 获取不同品质的物品列表
        // quality => [item_list]
        // quality: 1,2,3,4,5
        // 从item物品表中找到这个扭蛋下的所有可能抽到的物品
        $item = $this->_get_game_config()->getTbItem()->getDataList();
        $gacha_draw_list = [];
        foreach($item as $k => $v){
            // 不是货币
            if($v->type != 1){
                // 放进对应等级的数组中
                $gacha_draw_list[$v->quality][] = $v->id;
            }
        }
        // 开始抽签
        // 先抽出品质
        $quality = _get_quality_draw($rate_rule);
        // 在从该品质的物品中抽一个
        $quality_draw_list = $gacha_draw_list[$quality];
        $draw_result = $quality_draw_list[array_rand($quality_draw_list, 1)];
        return [[$draw_result, 1]];
    }

    /**
     * huhaiqin,2025.2.5
     * 获取商品详情接口
     */
    public function get_product_detail(){

    }

    /**
     * huhaiqin,2025.2.5
     * 购买商品接口,购买扭蛋
     * token: string //用户token,
     *   gacha_id: int //扭蛋的product_id
     *  //返回参数
     *  gacha_id: int //扭蛋id
     *  backpack：{} //背包 key-道具ID value-道具数量 （可以全量，也可以只发数量发生改变的道具）
     */
    public function buy_gacha(){
        $gacha_id = I('gacha_id');
        if(!$gacha_id){
            _apiReturn(0, '扭蛋id不能为空');
            return;
        }
        // 获取扭蛋信息，等扭蛋的表出来
        $product = $this->_get_game_config()->getTbProduct()->getDataMap()[$gacha_id];
        if(!$product){
            _apiReturn(0, '扭蛋不存在');
            return;
        }
        // 玩家信息
        $user = D('GameUser')->_get_game_user_info($this->_uid, 'backpack');
        // 扭蛋价格
        $currency_id = $product->cost[0];
        $cost = $product->cost[1];
        if($user['backpack'][$currency_id] < $cost){
            _apireturn(0, C('CURRENCY_MAP')[$currency_id].'不足');
            return;
        }
        
        // 检查是否超过购买当日限制

        // 扣除用户货币
        $post['backpack'] = $user['backpack'];
        $post['backpack'][$currency_id] -= $cost;
        // 获取抽奖结果
        $item_list = $this->draw_gacha($gacha_id);
        // 增加用户道具
        foreach($item_list as $v){
            $item_id = $v[0];
            $quantity = $v[1];
            if(!$post['backpack'][$item_id]){
                $post['backpack'][$item_id] = $quantity;
            }else{
                $post['backpack'][$item_id] += $quantity; 
            }
        }
        // 更新用户信息
        $post['id'] = $this->_uid;
        $res = D('GameUser')->_edit_game_user_info($post);
        if(!$res){
            _apiReturn(0, '购买失败', $user);
            return;
        }
        _write_user_log($this->_uid, 'buy_gacha', $gacha_id, $item_list);
        _apiReturn(1, '购买成功', ['item_list' => $item_list, 'user_info' => $this->_get_full_user_info()]);
    }

    /**
     * huhaiqin,2025.2.5
     * 购买商品接口
     *   //请求参数
     *   token: string //用户token,
     *   product_id: int //商品id
     *   //返回参数
     *   item_list: [] //得到的物品列表
     *   backpack：{} //背包 key-道具ID value-道具数量 （可以全量，也可以只发数量发生改变的道具）
     */
    public function buy_product(){
        // 先校验数据合法性
        $product_id = I('product_id');
        if(!$product_id){
            _apiReturn(0, '商品id不能为空');
            return;
        }
        // 获取商品信息
        $product = _get_config_table()->getTbProduct()->get($product_id);
        if(!$product){
            _apiReturn(0, '商品不存在');
            return;
        }
        $res = D('GameUser', 'Service')->buy_product($this->_uid, $product_id);
        if(!$res['status']){
            _apiReturn(0, $res['msg']);
            return;
        }
        // 如果有当日购买限制，那么在daily里也要增加购买记录
        _write_user_log($this->_uid, 'buy_product', $product_id, $res['data']['item_list']);
        _apiReturn(1, '购买成功', ['product_id' => $product_id, 'item_list' => $res['data']['item_list'], 'user_info' => $this->_get_full_user_info()]);

    }

    /**
     * 
     * du,2025.2.11
     * 修改用户金币
     * //请求参数
     * quantity: int //金币数量
     * currency: int //货币id 10001, 10002
     *  //返回参数
     *  user_info: {} //用户信息
     *
     */
    public function set_user_currency(){
        // 检查输入
        $currency = I('currency');
        if(!$currency){
            _apiReturn(0, '货币id不能为空');
            return;
        }
        $quantity = I('quantity');
        if(!$quantity){
            _apiReturn(0, '数量不能为空');
            return;
        }
        $res = $this->_set_user_backpack([[$currency, (int)$quantity]]);
        if(!$res){
            _apiReturn(0, '修改失败');
            return;
        }
        _apiReturn(1, '修改成功', ['user_info' => $this->_get_full_user_info()]);
    }
}